home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / prolog / brklyprl.lha / Emulator / Tests / Passed / test34.pl < prev    next >
Encoding:
Text File  |  1989-04-14  |  718 b   |  35 lines

  1.  
  2. /* Copyright (C) 1988, 1989 Herve' Touati, Aquarius Project, UC Berkeley */
  3.  
  4. /* the first thousand prime numbers. List processing and arithmetic */
  5.  
  6. main :-
  7.     primes(1000, X),    
  8.     write(X),
  9.     nl.
  10.  
  11. primes(Limit, Primes) :-
  12.     integers(2, Limit, Ints),
  13.     sift(Ints, Primes).
  14.  
  15. integers(Low, High, [Low|Rest]) :-
  16.     Low =< High,
  17.     !,    
  18.     M is Low + 1,
  19.     integers(M, High, Rest).
  20. integers(_,_,[]).
  21.  
  22. sift([],[]).
  23. sift([Int|Ints], [Int|Primes]) :-
  24.     remove_multiples(Int, Ints, IntsLeft),
  25.     sift(IntsLeft, Primes).
  26.  
  27. remove_multiples(P, [], []).
  28. remove_multiples(P, [Int|Ints], IntsLeft) :-
  29.     0 is Int mod P,
  30.     !,
  31.     remove_multiples(P, Ints, IntsLeft).
  32. remove_multiples(P, [Int|Ints], [Int|IntsLeft]) :-
  33.     remove_multiples(P, Ints, IntsLeft).
  34.  
  35.